/* SpinPause.h
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 05/25/2015
 *  Last Modified   : 05/25/2015
 * 
 */

#pragma once
#ifndef ymp_Intrinsics_SpinPause_H
#define ymp_Intrinsics_SpinPause_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Dependencies
#include "PublicLibs/CompilerSettings.h"
#include "PublicLibs/SystemLibs/ProcessorCapability/ProcessorCapability.h"
#if 0
#if _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif
#endif
#ifdef YMP_Arch_2001_x86_SSE2
#include <emmintrin.h>
#endif
namespace ymp{
namespace Intrinsics{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#ifdef YMP_Arch_2001_x86_SSE2
YM_FORCE_INLINE void spin_pause(){
    _mm_pause();
}
#else
YM_FORCE_INLINE void spin_pause(){}
#endif
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#if 0
#if _WIN32
YM_FORCE_INLINE void sleep_pause(){
    Sleep(1);
}
#else
YM_FORCE_INLINE void sleep_pause(){
    usleep(1);
}
#endif
#endif
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
}
#endif
